/********************************** (C) COPYRIGHT *******************************
* File Name          : modbus.h
* Author             : nx666
* Version            : V1.0.0
* Date               : 2023/07/22
* Description        : modbus相关.
*******************************************************************************/
#ifndef __MODBUS_H
#define __MODBUS_H

#ifdef __cplusplus
extern "C" {
#endif

#include "common_type.h"

//#define MODBUS_HOST
#define MODBUS_SLAVE_REG_NUM		(16)
#define MODBUS_SLAVE_RCBUF          (64)
#define MODBUS_SLAVE_SENDBUF    	(MODBUS_SLAVE_REG_NUM *2 + 5)

typedef struct 
 {
#ifndef  MODBUS_HOST
 	//作为从机时使用
  	uInt8   myadd;                          //本设备从机地址
 	uInt8   timout;                         //modbus数据持续时间
 	uInt8   recount;                        //modbus端口接收到的数据个数
 	uInt8   timrun;                         //modbus定时器是否计时标志
 	uInt8   reflag;                         //modbus一帧数据接受完成标志位
 	uInt8   rcbuf[MODBUS_SLAVE_RCBUF];      //modbus接受缓冲区
 	uInt8   sendbuf[MODBUS_SLAVE_SENDBUF]; //modbus接发送缓冲区
#else
 	//作为主机添加部分
 	uInt8   Host_Txbuf[8];	    //modbus发送数组	
 	uInt8   slave_add;		    //要匹配的从机设备地址（做主机实验时使用）
 	uInt8   Host_send_flag;     //主机设备发送数据完毕标志位
 	Int32   Host_Sendtime;      //发送完一帧数据后时间计数
 	uInt8   Host_time_flag;     //发送时间到标志位，=1表示到发送数据时间了
 	uInt8   Host_End;           //接收数据后处理完毕
#endif
 }modbus_;

/*********************************************************************
 * @fn      modbus_recv_bytes
 *
 * @brief   查询方式接收数据
 * 
 *
 * @return  void
 *          
 */
void modbus_recv_bytes(void);

/*********************************************************************
 * @fn      modbus_event
 *
 * @brief   modbus事件处理
 * 
 *
 * @return  void
 *          
 */
void modbus_event(void);

/*********************************************************************
 * @fn      modbus_slave_init
 *
 * @brief   modbus slave初始化
 * 
 *
 * @return  modbus寄存器地址
 *          
 */
uInt16 *modbus_slave_init(uInt16 devAddr);



#ifdef __cplusplus
}
#endif

#endif /*__MODBUS_H */